package service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import persistencia.dao.SolicitudCotizacionDAO;
import bean.Cliente;
import bean.OficinaDeVenta;
import bean.SolicitudCotizacion;
import bean.VOList;
import bean.vo.ClienteVO;
import bean.vo.ItemSolicitudCotizacionVO;
import bean.vo.SolicitudCotizacionVO;

@SuppressWarnings({"unchecked"})
public class ServiciosSolicitudCotizacion {

	protected static SolicitudCotizacion buscarSolicitudCotizacion (String cuitCliente, Integer nroSolicitud) throws Exception {
		Cliente cli = ServiciosCliente.buscarCliente(cuitCliente);
		if (cli == null){
			throw new Exception("ERROR - No existe un cliente con el cuit ingresado");
		}
		
		SolicitudCotizacion solicitud = (SolicitudCotizacion) SistemaCVR.getInstancia().buscarEntidad(new SolicitudCotizacion(nroSolicitud, cli));
		return solicitud;
	}
	
	public static SolicitudCotizacionVO buscarSolicitudCotizacion (ClienteVO c, Integer nroSolicitud) throws Exception {
		SolicitudCotizacion solicitud = ServiciosSolicitudCotizacion.buscarSolicitudCotizacion(c.getCuit(), nroSolicitud);
		return solicitud  != null ? solicitud.getVO() : null;
	}
	
	public static ArrayList<SolicitudCotizacionVO> getSolicitudesCotizacion() throws Exception{
		return new VOList<SolicitudCotizacionVO>().getVoList(SistemaCVR.getInstancia().getEntidades(SolicitudCotizacion.class.getName()));
	}
	
	public static List<SolicitudCotizacion> getSolicitudesPendientes()
	{
		return SolicitudCotizacionDAO.getInstancia().buscarSolicitudesPendientes();
	}
	
	public static SolicitudCotizacionVO crearSolicitudCotizacion(SolicitudCotizacionVO s) throws Exception{
		Integer nroSolicitud = s.getNumeroSolicitud();
		String cuitCliente = s.getCliente().getCuit();
		String nombreOdv = s.getOficinaDeVenta().getNombre();

		if (nroSolicitud == null || cuitCliente == null || nombreOdv == null) {
			throw new Exception("ERROR - Numero de solicitud/cuit cliente/nombre ODV son requeridos.");
		}
		
		Cliente cli = ServiciosCliente.buscarCliente(cuitCliente);
		if (cli == null){
			throw new Exception("ERROR - No existe un cliente con el cuit ingresado.");
		}
		
		OficinaDeVenta odv = ServiciosOficinaDeVenta.buscarOficinaDeVenta(nombreOdv);
		if (odv == null){
			throw new Exception("ERROR - No existe una ofician de venta con el nombre ingresado.");
		}
		
		if (ServiciosSolicitudCotizacion.buscarSolicitudCotizacion(cuitCliente, nroSolicitud) == null) {
			Date fechaRecepcion = new Date();
			SolicitudCotizacion solicitud = new SolicitudCotizacion(nroSolicitud, odv, cli, fechaRecepcion);
			
			for (ItemSolicitudCotizacionVO item : s.getItemsSolicitud()) {
				String codigoRodamiento = item.getCodigo(); 
				String sufijoRodamiento = item.getSufijo(); 
				String paisOrigen = item.getPaisOrigen();
				String fabricante = item.getFabricante(); 
				Integer cantidad = item.getCantidad();
				
				if (codigoRodamiento == null || paisOrigen == null || fabricante == null || cantidad == null) {
					throw new Exception("ERROR - Codigo de rodamiento, pais de origen, fabricante y cantidad son requeridos.");
				}
				
				solicitud.agregarItem(codigoRodamiento, sufijoRodamiento, paisOrigen, fabricante, cantidad);
			}
			
			SistemaCVR.getInstancia().agregarEntidad(solicitud);
			return solicitud.getVO();
		} else {
			throw new Exception("ERROR - Ya existe una solicitud para el cliente/numero de solicitud ingresados.");	
		}
	}
	
}
